package net.chrisrichardson.eventstore.examples.management.restaurant.commonswagger; import com.fasterxml.classmate.TypeResolver; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.ResponseEntity; import org.springframework.web.context.request.async.DeferredResult; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.WildcardType; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.concurrent.CompletableFuture; import static springfox.documentation.schema.AlternateTypeRules.newRule; @Configuration @EnableSwagger2 public class CommonSwaggerConfiguration { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("net.chrisrichardson.eventstore.examples.management.restaurant")) .build() .pathMapping("/") .genericModelSubstitutes(ResponseEntity.class, CompletableFuture.class) .alternateTypeRules( newRule(typeResolver.resolve(DeferredResult.class, typeResolver.resolve(ResponseEntity.class, WildcardType.class)), typeResolver.resolve(WildcardType.class)) ) .useDefaultResponseMessages(false) ; } @Autowired private TypeResolver typeResolver; }